package com.sz.common.pay.citic;

/**
 * Created by siqishangshu on 17/10/17.
 *
 这个SDK是基于中信银行上以文档开发，
     中信银行银企直联接口说明书(集团客户)V5.0.0.0.doc
     中信银行银企直联系统开发指南.chm
 本SDK尽适用于三藏平台与中信银行的数据业务，具体的封装必须遵守以下规则。

 SDK 目录说明

     client
        用与SDK与中信客户端进行通信接口 CITICConnector.post(...);
     constant
        封装使用的常量数据，各种操作码，标记字段，规则，分类等。
     entity
        封装与中信交互的xml在java中的对象,不同业务组在不同的目录下。
        每一组包括Request,Response。
        并使用jaxb 进行xml名称与格式的注解。
     util
        封装，解析，通信，使用的工具类，数据格式，日期格式，xml格式，及特殊处理，
     xml
        XmlMapper.convertToXml(,,,) ..convertToObj(...)
        此工具主要使用jaxb 进行entity与xml间的互转。

 由于与中信通信使用xml进行数据交互，对于xml的格式有以下要求。
 所有XML报文均遵循以下数据格式：
     <?xml version="1.0" encoding="GBK"?>
     <stream>
         <key1>value1</key1>
         <key2>value2</key2>
         <list name="userDataList">
             <row>
                 <key3>value3</key3>
                 <key4>value4</key4>
             </row>
             …
         </list>
     </stream>
 其中，list循环域中放置重复数据记录。
 报文中的数据项标签名称必须与接口定义中的数据项标签名称一致（包括大小写）。
 list 中的每个子集为一row
 使用注解进行封装必须遵守以下名称规范。

 例如：余额查询

     @XmlAccessorType(XmlAccessType.FIELD)                   ----必须注解
     @XmlRootElement(name = "stream")                        ————为xml单元的根
     @Data                                                   ————使用lombok生成规范的setter getter
     public class BalanceReq {

         private String action = RequestCode.BALANCE_QUERY;  ----操作码使用常量
         private String userName;                            ————所以属性名称与xml里一一对应，包括大小写，
         （不建议）不得已使用不同时，使用@XmlElement(name = "row")注解别名
         @XmlElementWrapper(name = "list")                   ————所以集合的封装，必注解@XmlElementWrapper(name = "list")
         @XmlElement(name = "row")                           ————所以集合和每一列是row进行封装的，必须注解。
         private List<BalanceNo> list;                ————BalanceNo，子对象，注解没有根，
     }

 子对象封装格式如下

     @XmlAccessorType(XmlAccessType.FIELD)
     @Data
     public class BalanceNo {
         private String accountNo;
     }


 新增的数据必须遵守以上约定，否则可能无法解析，导致功能失效。

 使用是特别注意，数据格式。

 */
